#!/bin/bash
#========================================================================
# Author: YSLin
# Email: 
# File Name: local.sh
# Description: 
#   
# Edit History: 
#   2011-04-30    File created.
#========================================================================

#========================================================================
## 不使用區域變數的例子
#========================================================================

# 由於函數裡面和呼叫者都是使用同樣名稱的變數name，
# 所以執行結果和原本想要的結果不同。
osname_global() {
    name=`uname -s`
    echo "OS name: $name"
}
name=`whoami`
osname_global  # 變數name的內容會被改變
echo "User name: $name"


#========================================================================
## 使用區域變數的例子
#========================================================================

# 由於在函數裡面把變數name宣告為區域變數
# 因此和呼叫者的變數name之間不會互相干涉
osname_local() {
    local name
    name=`uname -s`
    echo "OS name: $name"
}
name=`whoami`
osname_local
echo "User name: $name"


#========================================================================
# variable scope
#========================================================================
# func_A宣告了區域變數var，並變更其值，然後呼叫了func_B。
# func_B並沒有宣告區域變數var，所以依照C、perl、ruby的觀點來看，
# 這個值相當於全域變數（以此例來講就是「Global Value」）。
# 但是，在shell script中，會繼承呼叫者的值，
# 所以應該會是在func_A的值，也就是「function A」才對。

func_B() {
    echo $var #使用global變數,但是會隨著呼叫函數的local變數而變
}

func_A() {
    local var 
    var="function A"
    func_B
}

var="Global Value"
func_A

